"""
配置文件 - 定义所有游戏参数和模型超参数

本文件包含两个主要配置类：
1. GameConfig: 游戏环境的所有物理参数和规则
2. ModelConfig: 深度学习模型的超参数和训练设置

作者：wjttdbx
版本：2.0 - 按照完善后的黑白博弈游戏规则更新
"""
import numpy as np
class GameConfig:
    """
    游戏环境配置类
    
    定义无人集群博弈环境的所有物理参数、单位属性、战斗规则等。
    这些参数直接影响游戏的平衡性和复杂度。
    
    属性说明：
        - 所有距离单位为米(m)
        - 所有时间单位为秒(s)
        - 所有速度单位为米/秒(m/s)
    """
    # ===== 调试模式 =====
    debug_mode = False # 是否启用调试模式，调试模式下会打印更多信息
    # debug_mode = True
    seed = 55
    np.random.seed(seed)  # 固定随机种子以确保可重复性
    # ===== 区域设置 =====
    # 根据题目要求的凸八边形区域
    # A1A2=A6A5=200km, A3A4=A7A8=500km, A3A8=A4A7=300km, A1A8=A2A3=A6A7=A5A4=100km
    
    # ===== 白方无人艇参数 =====
    WHITE_BOAT_MAX_SPEED = 10  # m/s (题目要求0-10m/s)
    WHITE_BOAT_MIN_TURN_RADIUS = 20  # m (题目要求20m)
    WHITE_BOAT_DETECT_RANGE = 20000  # 20km圆形探测
    WHITE_BOAT_LOCK_RANGE = 40000   # 40km锁定范围
    WHITE_BOAT_LOCK_DURATION = 300  # 5分钟 = 300秒
    WHITE_BOAT_LOCK_SUCCESS_RATE = 0.8
    WHITE_BOAT_MAX_ACCELERATION = 2.0  # m/s² 最大加速度

    # ===== 白方无人机参数 =====
    WHITE_DRONE_MIN_SPEED = 20  # m/s (题目要求最小20m/s)
    WHITE_DRONE_MAX_SPEED = 150  # m/s (题目要求最大150m/s)
    WHITE_DRONE_MIN_TURN_RADIUS = 100  # m (题目要求100m)
    WHITE_DRONE_TAKEOFF_SPEED = 20  # m/s (题目要求起飞瞬时获得20m/s初速)
    WHITE_DRONE_DETECT_RANGE = 60000  # 60km
    WHITE_DRONE_DETECT_ANGLE = 60  # 60度扇形探测
    WHITE_DRONE_FLIGHT_TIME = 7200    # 2小时 = 7200秒
    WHITE_DRONE_RECHARGE_TIME = 18000 # 5小时 = 18000秒
    WHITE_DRONE_LANDING_DISTANCE = 100  # m (题目要求距离≤100m可降落)
    WHITE_DRONE_LANDING_SPEED = 20  # m/s (题目要求速度≤20m/s可降落)
    WHITE_DRONE_MAX_ACCELERATION = 10.0  # m/s² 最大加速度

    # ===== 黑方无人艇参数 =====
    BLACK_BOAT_MAX_SPEED = 10  # m/s (题目要求0-10m/s)
    BLACK_BOAT_MIN_TURN_RADIUS = 20  # m (题目要求20m)
    BLACK_BOAT_DETECT_RANGE = 30000  # 30km圆形探测
    BLACK_BOAT_LOCK_RANGE = 40000    # 40km锁定范围
    BLACK_BOAT_LOCK_DURATION = 300   # 5分钟 = 300秒
    BLACK_BOAT_LOCK_SUCCESS_RATE = 0.8
    BLACK_BOAT_MAX_ACCELERATION = 2.0  # m/s² 最大加速度
    
    # ===== 碰撞与威胁范围 =====
    COLLISION_DISTANCE = 100  # m (题目要求距离<100m视为碰撞)
    
    # ===== 锁定与状态异常规则 =====
    FREEZE_DURATION = 300  # 冻结状态持续5分钟 = 300秒
    MAX_LOCKS_TO_ELIMINATE = 2  # 第二次锁定成功后退出
    
    # ===== 仿真参数 =====
    TIME_STEP = 1.0  # 每步1秒（离散时间推进）
    MAX_EPISODE_STEPS = 72000  # 最大20小时 = 72000秒
    
    # ===== 初始单位数量 =====
    WHITE_BOATS = 5  # 5艘白方无人艇
    WHITE_DRONES_PER_BOAT = 1  # 每艘无人艇配1架无人机
    BLACK_BOATS_MIN = 4  # 黑方无人艇最小数量
    BLACK_BOATS_MAX = 20  # 黑方无人艇最大数量
    BLACK_BOATS = np.random.randint(4, 21)  # 默认黑方无人艇数量（可根据实际需要调整）
    
    # ===== 区域尺寸 =====
    AREA_WIDTH = 400000  # 400km
    AREA_HEIGHT = 673205  #500000+100000*math.sqrt(3) # 700km




class ModelConfig:
    """
    深度学习模型配置类
    
    定义神经网络架构、训练超参数、优化器设置等。
    这些参数直接影响模型的学习能力和训练稳定性。
    
    主要参数组：
        - 网络架构：隐藏层大小、层数等
        - 训练参数：学习率、批量大小、折扣因子等
        - PPO特定参数：裁剪范围、训练轮数等
        - 探索参数：噪声水平等
        - 训练控制：总步数、评估频率等
    
    注意：
        - 参数调整需要考虑计算资源和训练时间
        - 不同任务可能需要不同的参数设置
    """
    # 网络结构
    HIDDEN_DIM = 256
    NUM_LAYERS = 3
    
    # 训练参数
    LEARNING_RATE = 3e-4
    BATCH_SIZE = 64
    BUFFER_SIZE = 100000
    GAMMA = 0.99
    TAU = 0.005
    
    # PPO参数
    PPO_CLIP_RANGE = 0.2
    PPO_EPOCHS = 10
    
    # 探索参数
    EXPLORATION_NOISE = 0.1
    
    # 训练设置
    TOTAL_TIMESTEPS = 1000000
    EVAL_FREQ = 50  # 每50个episode评估一次
    SAVE_FREQ = 100  # 每100个episode保存一次 